#!/bin/bash

#判断是否安装bc软件
echo 1+1 | bc &>>/dev/null
if (($? != 0))
then
	yum -q -y install bc >>/dev/null
wait
	if (($? != 0))
	then
		echo "bc软件自动下载失败"
		echo "请用户手动下载bc软件"
		exit
	fi
fi

#生成随机数 $1为范围 $2为生成次数
myshuf() {
for i in $(seq $2)
do
	rand_num=`shuf -i 0-$1 -n 1`
	shuf_array[$i]=$rand_num
done
echo ${shuf_array[*]}
}

#把获取的字符串转为数组并处理为特殊字符并输出
string_array() {
FIN=$' ' read -ra win_array <<< $@
#echo ${win_array[*]}
num=${win_array[0]}
for i in ${win_array[*]:1}
do
	#echo $i
	if (($num>42))
	then
		if (($i<=1))
		then
			let wmx++
			sleep 0.5
			echo -n "★"
		elif ((1<$i && $i<=18))
		then
			let wmi++
			sleep 0.5
			echo -n "☆"
		else
			sleep 0.5
			echo -n "-"
		fi
	fi
	if (($num<=42))
        then
                if (($i==0))
                then
			let wmx++
                        sleep 0.5
                        echo -n "★"
                elif ((1<$i))
		then
                        sleep 0.5
                        echo -n "-"
                fi
        fi
done

echo ""

if (($num>42))
then
echo "  UP：$wmx"
echo "常驻：$wmi"
fi

if (($num<=42))
then
echo "  UP：$wmx"
fi
}

#计算概率
pbb() {
FIN=$' ' read -ra win_array <<< $@
num=${win_array[0]}
num1=${#win_array[*]}
win_max=0 #UP中奖次数
win_min=0 #常驻中奖次数
for i in ${win_array[*]:1}
do
	if (($num>42))
        then
                if (($i<=1))
                then
                        let win_max++
                elif ((1<$i && $i<=18))
                then
			let win_min++
                fi
        fi
        if (($num<=42))
        then
                if (($i==0))
                then
                        let win_max++
                fi
        fi
done
if (($num>42))
then
printf "  UP中奖概率：%.2f%%\n" "$(echo "scale=4;$win_max/($num1-1)*100" |bc)"
printf "常驻中奖概率：%.2f%%\n" "$(echo "scale=4;$win_min/($num1-1)*100" |bc)"
fi
if (($num<=42))
then
printf "UP中奖概率：%.2f%%\n" "$(echo "scale=4;$win_max/($num1-1)*100" |bc)"
fi
}
#开始游戏提示信息
stat() {
cat<<EOF
抽奖小游戏[★为UP，☆为常驻]
可以自定义奖池内数量
可以自定义抽奖次数
可以选择是否计算中奖概率

----------回车开始----------
EOF
read -p ""
clear
}

#选择提示信息
hint() {
cat<<EOF
1)定义奖池数量，小于42则只有一个UP[默认85个，2个UP,18个常驻]
2)是否显示中奖概率(中奖数/抽奖数*100)[默认为关]

-----------------输入编号进行设置，或回车跳过-----------------
EOF
}

while true
do
clear
	range=85 #抽奖范围
	pdd=n #是否显示中奖概率[y/n]
	stat
	hint
	read -p "请输入[退出q]：" hin
	if [ -n $hin ]
	then
	case $hin in
	1)
		read -p  "设置奖池数量[默认85，请输入数字]：" range

		if [ -z "$range" ]
		then  
			  range="85"  # 设置默认值  
		fi
	;;
	2)
		read -p  "是否显示中奖概率[y/n:n]：" pdd
		 if [ -z "$pdd" ]
                then
                          pdd="n"  # 设置默认值
                fi
	;;
	q|Q) exit ;;
	esac
	fi

	while true
	do
	clear
		read -p  "抽奖次数：" cunt
		a=$(myshuf $range $cunt)
		string_array $range $a

		case $pdd in
		y|Y|yes|YES|Yes|yEs|yeS) pbb $range $a ;;
		esac
		read -p "退出[q]，返回设置[n]，继续[回车]：" on
		case $on in
		q|Q) exit  ;;
		n|N) break ;;
		esac
	done

done
